﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL;
using System.Data;
using System.IO;
using System.Configuration;
using System.Transactions;
using System.Data.Linq;
using System.Data.SqlClient;
using System.ComponentModel;
using UtilityExtensions;
using BOL.CentroCosto;

namespace BOL
{
    [Serializable]
    public class RecepcionDocBL
    {

        #region "CRUD"

        public int AddFromOrdenCompra(string docRecepcion,
                                        DateTime fecha,
                                        int idOrdenCompra,
                                        int? idOrdenAnticipo,
                                        int idObra,
                                        bool trasferirGESPAG,
                                        List<DocumentoCompraInfo> listadocumentos
                                        )
        {

            using (TransactionScope ts = new TransactionScope())
            {

                //tipoCambioDollar: tipo de cambio segun fecha de  emision de  la factura

                int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                dbGestionDataContext _db = new dbGestionDataContext(Parametros.strConnString);
                ProveedorBL prov = new ProveedorBL();
                EmpleadoBL emp = new EmpleadoBL();
                dbGespagDataContext _dbGesPag = new dbGespagDataContext(Parametros.dbGesPag);



                if (idOrdenAnticipo == 0)
                {
                    idOrdenAnticipo = null;
                }

                //--------------------
                bool acceso = new FormularioAcceso().VerificarAcceso(_db,
                                                            idEmpleadoEmisor,
                                                            9, //FR
                                                            idObra,
                                                            2); //creacion
                                                        //-------------------------

                OrdenCompra oc = _db.OrdenCompras.Single(p => p.idInternal == idOrdenCompra);

                OrdenAnticipo oca = _db.OrdenAnticipos.SingleOrDefault(w => w.idInternal == (idOrdenAnticipo != null ? idOrdenAnticipo.Value : 0));

                decimal totalMonOrig = oca != null ? oca.total : oc.total.Value;
                int idRecepcion = 0;                          

                // caso de GO
                //1	Orden Compra	OC
                //2	GASTO OBRA	GO
                //3	GASTO PLANILLA	GPL
                //4	GASTO FINANCIERO	GFI
                //5	CAJA CHICA	CH

                if (docRecepcion.Trim().Length == 0)
                {
                    throw new Exception("Verifique numero FR");
                }
                


                foreach (var item in listadocumentos)
                {

                    //AL SER UNA ORDEN DE COMPRA SOLO ES FACTURA , UN SOLO DOCUMENTO DE  FACTURACION


                    //para el caso de nota credito, pues se toma para comparar su facturacion 
                    totalMonOrig = item.tipoDoc == 6 ? item.totalDoc : totalMonOrig;

                    //validamos que solo exista un documento facturado

                    if (oc.idEstado == 30 & item.tipoDoc != 6)
                    {
                        throw new Exception("EL documento se encuentra facturado");
                    }


                    RecepcionDoc recepcion = new RecepcionDoc();

                       recepcion.add(_db,
                                    idOrdenCompra,
                                    idOrdenAnticipo,
                                    null,
                                    idObra,
                                    docRecepcion,
                                    item.glosa,
                                    item.numDocumento,
                                    item.tipoDoc,
                                    "M",
                                    item.idMoneda,
                                    totalMonOrig,
                                    item.totalDoc,
                                    item.netoDoc,
                                    item.igvDoc,
                                    item.totalSOL, //soles
                                    item.netoTotalSOL,           //soles
                                    item.IGVTotalSOL,              //soles
                                    item.impInafecto,
                                    item.impISC,
                                    item.Renta4ta,
                                    item.numDiasVen,
                                    item.fechaEmision,
                                    item.fechaVencimiento,
                                    fecha,
                                    item.fechaPago,
                                    item.tipoCambio,
                                    idEmpleadoEmisor,
                                    Convert.ToChar(item.tipoProveedor),
                                     item.idProveedor,
                                     item.idEmpleado,
                                     item.RUC,
                                     item.IGV,
                                     item.proveedor,
                                     item.totalUS
                                    );

                    _db.SubmitChanges();
                    idRecepcion = recepcion.idInternal;
                    // si no existe el proveedor lo creo

                    //  no proceses financiados ni planilla
                    //
                    //------------------------
                    //buscamos en  gespag 


                    if (trasferirGESPAG)
                    {
                        if (item.tipoDoc == 17)  //planilla
                        {
                            emp.UpdateGesPag(_db, item.idEmpleado.Value);
                        }
                        else if (item.tipoDoc == 3)
                        {
                            prov.UpdateGesPag(_db, item.idProveedor.Value, 'H');
                        }
                        else
                        {
                            prov.UpdateGesPag(_db, item.idProveedor.Value, 'P');

                        }
                        
                       //creamos su propia glosa,
                        var glosa = string.Format("{0},{1},{2} {3}", recepcion.Obra.centroCosto, item.proveedor, item.tipoDocumento,item.numDocumento);
                        //----------------------
                        this.AddGesPag(_dbGesPag,
                            item,
                            glosa,
                            recepcion.idInternal,
                            recepcion.Obra.Proyecto.idEmpresa.Value,
                            recepcion.Obra.centroCosto);
                    }
                }


                // la orden de compra tiene que estar cerrada como Facturado//actualiza el estado de OC
                // para el caso de anticipos la orden de compra sera parcialmente  terminada
                ///SOLO la orden de compra tiene un solo factura,
                ///
                //if (oc.idTipoOrden != 3) //caja chica  ,este es el unico que tiene mas de un documento
                //{
                        decimal total = 0;
                        var q = (from a in _db.RecepcionDocs
                                 where a.idOrden == oc.idInternal
                                 select a).Sum(p => p.totalMonOrig);
                        if (q.HasValue)
                        {
                            total = q.Value;
                        }

                    RecepcionDoc recepciono = new RecepcionDoc();
                    decimal totalFacturado = recepciono.GetTotalFacturadoXOrdenCompra(_db, idOrdenCompra);
                        decimal totalOrdenCompra = oc.total.Value;

                        oc.idEstado = 30;// facturado


                        _db.SubmitChanges();

               // }
                ts.Complete();
                return idRecepcion;


            }
        }

        private void DeleteGesPagVerif0002_CIESA(dbGespagDataContext _db, RecepcionDoc recepcionDoc)
        {
            var docuemnto = _db.PAG0002CAR1s.SingleOrDefault
                   (p => p.CT1_CTIPANE == recepcionDoc.tipoProveedor &
                   p.CT1_CCODANE == recepcionDoc.ruc.Trim() &
                   p.CT1_CCODSUC == "0001" &
                    p.CT1_CDATEXT==recepcionDoc.idInternal.ToString() &
                   p.CT1_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                   p.CT1_CNUMDOC == recepcionDoc.numDocumento);

            if (docuemnto != null)
            {//anula

                if (docuemnto.CT1_CESTADO == 'C')
                {
                    throw new Exception("El documento {0}/{1} esta en Cartera GESPAG".Fmt(recepcionDoc.DocumentoTipo.abreviacion,recepcionDoc.numDocumento));
                }
                _db.PAG0002CAR1s.DeleteOnSubmit(docuemnto);
            }
            var docuemnto2 = _db.PAG0002CAR2s.SingleOrDefault
                    (p => p.CT2_CTIPANE == recepcionDoc.tipoProveedor &
                    p.CT2_CCODANE == recepcionDoc.ruc.Trim() &
                    p.CT2_CCODSUC == "0001" &
                    p.CT2_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                    p.CT2_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR2  WHERE CT2_CTIPANE='P'   AND 
            ///CT2_CCODANE='20100025915'   AND   
            ///CT2_CCODSUC='0001'   AND   
            ///CT2_CTIPDOC='FT'   AND   
            ///CT2_CNUMDOC='001-00000001' 

            if (docuemnto2 != null)
            {//anula
                _db.PAG0002CAR2s.DeleteOnSubmit(docuemnto2);
            }
            var docuemnto3 = _db.PAG0002CAR3s.SingleOrDefault
                  (p => p.CT3_CTIPANE == recepcionDoc.tipoProveedor &
                  p.CT3_CCODANE == recepcionDoc.ruc.Trim() &
                  p.CT3_CCODSUC == "0001" &
                  p.CT3_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                  p.CT3_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR3  WHERE CT3_CTIPANE='P'   AND   
            ///CT3_CCODANE='20100025915'   AND   
            ///CT3_CCODSUC='0001'   AND   
            ///CT3_CTIPDOC='FT'   AND   
            ///CT3_CNUMDOC='001-00000001' 
            ///

            if (docuemnto3 != null)
            {//anula
                _db.PAG0002CAR3s.DeleteOnSubmit(docuemnto3);
            }
            _db.SubmitChanges();

        }
        private void DeleteGesPagVerif0004_ESPINOSA(dbGespagDataContext _db, RecepcionDoc recepcionDoc)
        {
            var docuemnto = _db.PAG0004CAR1s.SingleOrDefault
                   (p => p.CT1_CTIPANE == recepcionDoc.tipoProveedor &
                   p.CT1_CCODANE == recepcionDoc.ruc.Trim() &
                   p.CT1_CCODSUC == "0001" &
                   p.CT1_CDATEXT == recepcionDoc.idInternal.ToString() &
                   p.CT1_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                   p.CT1_CNUMDOC == recepcionDoc.numDocumento);

            if (docuemnto != null)
            {//anula

                if (docuemnto.CT1_CESTADO == 'C')
                {
                    throw new Exception("El documento {0}/{1} esta en Cartera GESPAG".Fmt(recepcionDoc.DocumentoTipo.abreviacion, recepcionDoc.numDocumento));
                }
                _db.PAG0004CAR1s.DeleteOnSubmit(docuemnto);
            }
            var docuemnto2 = _db.PAG0004CAR2s.SingleOrDefault
                    (p => p.CT2_CTIPANE == recepcionDoc.tipoProveedor &
                    p.CT2_CCODANE == recepcionDoc.ruc.Trim() &
                    p.CT2_CCODSUC == "0001" &
                    p.CT2_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                    p.CT2_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR2  WHERE CT2_CTIPANE='P'   AND 
            ///CT2_CCODANE='20100025915'   AND   
            ///CT2_CCODSUC='0001'   AND   
            ///CT2_CTIPDOC='FT'   AND   
            ///CT2_CNUMDOC='001-00000001' 

            if (docuemnto2 != null)
            {//anula
                _db.PAG0004CAR2s.DeleteOnSubmit(docuemnto2);
            }
            var docuemnto3 = _db.PAG0004CAR3s.SingleOrDefault
                  (p => p.CT3_CTIPANE == recepcionDoc.tipoProveedor &
                  p.CT3_CCODANE == recepcionDoc.ruc.Trim() &
                  p.CT3_CCODSUC == "0001" &
                  p.CT3_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                  p.CT3_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR3  WHERE CT3_CTIPANE='P'   AND   
            ///CT3_CCODANE='20100025915'   AND   
            ///CT3_CCODSUC='0001'   AND   
            ///CT3_CTIPDOC='FT'   AND   
            ///CT3_CNUMDOC='001-00000001' 
            ///

            if (docuemnto3 != null)
            {//anula
                _db.PAG0004CAR3s.DeleteOnSubmit(docuemnto3);
            }
            _db.SubmitChanges();

        }
        private void DeleteGesPagVerif0005_CLASEM(dbGespagDataContext _db, RecepcionDoc recepcionDoc)
        {
            var docuemnto = _db.PAG0005CAR1s.SingleOrDefault
                   (p => p.CT1_CTIPANE == recepcionDoc.tipoProveedor &
                   p.CT1_CCODANE == recepcionDoc.ruc.Trim() &
                   p.CT1_CCODSUC == "0001" &
                   p.CT1_CDATEXT == recepcionDoc.idInternal.ToString() &
                   p.CT1_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                   p.CT1_CNUMDOC == recepcionDoc.numDocumento);

            if (docuemnto != null)
            {//anula

                if (docuemnto.CT1_CESTADO == 'C')
                {
                    throw new Exception("El documento {0}/{1} esta en Cartera GESPAG".Fmt(recepcionDoc.DocumentoTipo.abreviacion, recepcionDoc.numDocumento));
                }
                _db.PAG0005CAR1s.DeleteOnSubmit(docuemnto);
            }
            var docuemnto2 = _db.PAG0005CAR2s.SingleOrDefault
                    (p => p.CT2_CTIPANE == recepcionDoc.tipoProveedor &
                    p.CT2_CCODANE == recepcionDoc.ruc.Trim() &
                    p.CT2_CCODSUC == "0001" &
                    p.CT2_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                    p.CT2_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR2  WHERE CT2_CTIPANE='P'   AND 
            ///CT2_CCODANE='20100025915'   AND   
            ///CT2_CCODSUC='0001'   AND   
            ///CT2_CTIPDOC='FT'   AND   
            ///CT2_CNUMDOC='001-00000001' 

            if (docuemnto2 != null)
            {//anula
                _db.PAG0005CAR2s.DeleteOnSubmit(docuemnto2);
            }
            var docuemnto3 = _db.PAG0005CAR3s.SingleOrDefault
                  (p => p.CT3_CTIPANE == recepcionDoc.tipoProveedor &
                  p.CT3_CCODANE == recepcionDoc.ruc.Trim() &
                  p.CT3_CCODSUC == "0001" &
                  p.CT3_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                  p.CT3_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR3  WHERE CT3_CTIPANE='P'   AND   
            ///CT3_CCODANE='20100025915'   AND   
            ///CT3_CCODSUC='0001'   AND   
            ///CT3_CTIPDOC='FT'   AND   
            ///CT3_CNUMDOC='001-00000001' 
            ///

            if (docuemnto3 != null)
            {//anula
                _db.PAG0005CAR3s.DeleteOnSubmit(docuemnto3);
            }
            _db.SubmitChanges();

        }
        private void DeleteGesPagVerif0006_VIASCAMINOS(dbGespagDataContext _db, RecepcionDoc recepcionDoc)
        {
            var docuemnto = _db.PAG0006CAR1s.SingleOrDefault
                   (p => p.CT1_CTIPANE == recepcionDoc.tipoProveedor &
                   p.CT1_CCODANE == recepcionDoc.ruc.Trim() &
                   p.CT1_CCODSUC == "0001" &
                   p.CT1_CDATEXT == recepcionDoc.idInternal.ToString() &
                   p.CT1_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                   p.CT1_CNUMDOC == recepcionDoc.numDocumento);

            if (docuemnto != null)
            {//anula

                if (docuemnto.CT1_CESTADO == 'C')
                {
                    throw new Exception("El documento {0}/{1} esta en Cartera GESPAG".Fmt(recepcionDoc.DocumentoTipo.abreviacion, recepcionDoc.numDocumento));
                }
                _db.PAG0006CAR1s.DeleteOnSubmit(docuemnto);
            }
            var docuemnto2 = _db.PAG0006CAR2s.SingleOrDefault
                    (p => p.CT2_CTIPANE == recepcionDoc.tipoProveedor &
                    p.CT2_CCODANE == recepcionDoc.ruc.Trim() &
                    p.CT2_CCODSUC == "0001" &
                    p.CT2_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                    p.CT2_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR2  WHERE CT2_CTIPANE='P'   AND 
            ///CT2_CCODANE='20100025915'   AND   
            ///CT2_CCODSUC='0001'   AND   
            ///CT2_CTIPDOC='FT'   AND   
            ///CT2_CNUMDOC='001-00000001' 

            if (docuemnto2 != null)
            {//anula
                _db.PAG0006CAR2s.DeleteOnSubmit(docuemnto2);
            }
            var docuemnto3 = _db.PAG0006CAR3s.SingleOrDefault
                  (p => p.CT3_CTIPANE == recepcionDoc.tipoProveedor &
                  p.CT3_CCODANE == recepcionDoc.ruc.Trim() &
                  p.CT3_CCODSUC == "0001" &
                  p.CT3_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                  p.CT3_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR3  WHERE CT3_CTIPANE='P'   AND   
            ///CT3_CCODANE='20100025915'   AND   
            ///CT3_CCODSUC='0001'   AND   
            ///CT3_CTIPDOC='FT'   AND   
            ///CT3_CNUMDOC='001-00000001' 
            ///

            if (docuemnto3 != null)
            {//anula
                _db.PAG0006CAR3s.DeleteOnSubmit(docuemnto3);
            }
            _db.SubmitChanges();

        }
        private void DeleteGesPagVerif0007_EOMGRUPO(dbGespagDataContext _db, RecepcionDoc recepcionDoc)
        {
            var docuemnto = _db.PAG0007CAR1s.SingleOrDefault
                   (p => p.CT1_CTIPANE == recepcionDoc.tipoProveedor &
                   p.CT1_CCODANE == recepcionDoc.ruc.Trim() &
                   p.CT1_CCODSUC == "0001" &
                   p.CT1_CDATEXT == recepcionDoc.idInternal.ToString() &
                   p.CT1_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                   p.CT1_CNUMDOC == recepcionDoc.numDocumento);

            if (docuemnto != null)
            {//anula

                if (docuemnto.CT1_CESTADO == 'C')
                {
                    throw new Exception("El documento {0}/{1} esta en Cartera GESPAG".Fmt(recepcionDoc.DocumentoTipo.abreviacion, recepcionDoc.numDocumento));
                }
                _db.PAG0007CAR1s.DeleteOnSubmit(docuemnto);
            }
            var docuemnto2 = _db.PAG0007CAR2s.SingleOrDefault
                    (p => p.CT2_CTIPANE == recepcionDoc.tipoProveedor &
                    p.CT2_CCODANE == recepcionDoc.ruc.Trim() &
                    p.CT2_CCODSUC == "0001" &
                    p.CT2_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                    p.CT2_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR2  WHERE CT2_CTIPANE='P'   AND 
            ///CT2_CCODANE='20100025915'   AND   
            ///CT2_CCODSUC='0001'   AND   
            ///CT2_CTIPDOC='FT'   AND   
            ///CT2_CNUMDOC='001-00000001' 

            if (docuemnto2 != null)
            {//anula
                _db.PAG0007CAR2s.DeleteOnSubmit(docuemnto2);
            }
            var docuemnto3 = _db.PAG0007CAR3s.SingleOrDefault
                  (p => p.CT3_CTIPANE == recepcionDoc.tipoProveedor &
                  p.CT3_CCODANE == recepcionDoc.ruc.Trim() &
                  p.CT3_CCODSUC == "0001" &
                  p.CT3_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                  p.CT3_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR3  WHERE CT3_CTIPANE='P'   AND   
            ///CT3_CCODANE='20100025915'   AND   
            ///CT3_CCODSUC='0001'   AND   
            ///CT3_CTIPDOC='FT'   AND   
            ///CT3_CNUMDOC='001-00000001' 
            ///

            if (docuemnto3 != null)
            {//anula
                _db.PAG0007CAR3s.DeleteOnSubmit(docuemnto3);
            }
            _db.SubmitChanges();

        }
        private void DeleteGesPagVerif0008_EOMINVERCIONES(dbGespagDataContext _db, RecepcionDoc recepcionDoc)
        {
            var docuemnto = _db.PAG0008CAR1s.SingleOrDefault
                   (p => p.CT1_CTIPANE == recepcionDoc.tipoProveedor &
                   p.CT1_CCODANE == recepcionDoc.ruc.Trim() &
                   p.CT1_CCODSUC == "0001" &
                   p.CT1_CDATEXT == recepcionDoc.idInternal.ToString() &
                   p.CT1_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                   p.CT1_CNUMDOC == recepcionDoc.numDocumento);

            if (docuemnto != null)
            {//anula

                if (docuemnto.CT1_CESTADO == 'C')
                {
                    throw new Exception("El documento {0}/{1} esta en Cartera GESPAG".Fmt(recepcionDoc.DocumentoTipo.abreviacion, recepcionDoc.numDocumento));
                }
                _db.PAG0008CAR1s.DeleteOnSubmit(docuemnto);
            }
            var docuemnto2 = _db.PAG0008CAR2s.SingleOrDefault
                    (p => p.CT2_CTIPANE == recepcionDoc.tipoProveedor &
                    p.CT2_CCODANE == recepcionDoc.ruc.Trim() &
                    p.CT2_CCODSUC == "0001" &
                    p.CT2_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                    p.CT2_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR2  WHERE CT2_CTIPANE='P'   AND 
            ///CT2_CCODANE='20100025915'   AND   
            ///CT2_CCODSUC='0001'   AND   
            ///CT2_CTIPDOC='FT'   AND   
            ///CT2_CNUMDOC='001-00000001' 

            if (docuemnto2 != null)
            {//anula
                _db.PAG0008CAR2s.DeleteOnSubmit(docuemnto2);
            }
            var docuemnto3 = _db.PAG0008CAR3s.SingleOrDefault
                  (p => p.CT3_CTIPANE == recepcionDoc.tipoProveedor &
                  p.CT3_CCODANE == recepcionDoc.ruc.Trim() &
                  p.CT3_CCODSUC == "0001" &
                  p.CT3_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                  p.CT3_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR3  WHERE CT3_CTIPANE='P'   AND   
            ///CT3_CCODANE='20100025915'   AND   
            ///CT3_CCODSUC='0001'   AND   
            ///CT3_CTIPDOC='FT'   AND   
            ///CT3_CNUMDOC='001-00000001' 
            ///

            if (docuemnto3 != null)
            {//anula
                _db.PAG0008CAR3s.DeleteOnSubmit(docuemnto3);
            }
            _db.SubmitChanges();

        }
        private void DeleteGesPagVerif0009_PROMVIVIENDACHAO(dbGespagDataContext _db, RecepcionDoc recepcionDoc)
        {
            var docuemnto = _db.PAG0009CAR1s.SingleOrDefault
                   (p => p.CT1_CTIPANE == recepcionDoc.tipoProveedor &
                   p.CT1_CCODANE == recepcionDoc.ruc.Trim() &
                   p.CT1_CCODSUC == "0001" &
                   p.CT1_CDATEXT == recepcionDoc.idInternal.ToString() &
                   p.CT1_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                   p.CT1_CNUMDOC == recepcionDoc.numDocumento);

            if (docuemnto != null)
            {//anula

                if (docuemnto.CT1_CESTADO == 'C')
                {
                    throw new Exception("El documento {0}/{1} esta en Cartera GESPAG".Fmt(recepcionDoc.DocumentoTipo.abreviacion, recepcionDoc.numDocumento));
                }
                _db.PAG0009CAR1s.DeleteOnSubmit(docuemnto);
            }
            var docuemnto2 = _db.PAG0009CAR2s.SingleOrDefault
                    (p => p.CT2_CTIPANE == recepcionDoc.tipoProveedor &
                    p.CT2_CCODANE == recepcionDoc.ruc.Trim() &
                    p.CT2_CCODSUC == "0001" &
                    p.CT2_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                    p.CT2_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR2  WHERE CT2_CTIPANE='P'   AND 
            ///CT2_CCODANE='20100025915'   AND   
            ///CT2_CCODSUC='0001'   AND   
            ///CT2_CTIPDOC='FT'   AND   
            ///CT2_CNUMDOC='001-00000001' 

            if (docuemnto2 != null)
            {//anula
                _db.PAG0009CAR2s.DeleteOnSubmit(docuemnto2);
            }
            var docuemnto3 = _db.PAG0009CAR3s.SingleOrDefault
                  (p => p.CT3_CTIPANE == recepcionDoc.tipoProveedor &
                  p.CT3_CCODANE == recepcionDoc.ruc.Trim() &
                  p.CT3_CCODSUC == "0001" &
                  p.CT3_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                  p.CT3_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR3  WHERE CT3_CTIPANE='P'   AND   
            ///CT3_CCODANE='20100025915'   AND   
            ///CT3_CCODSUC='0001'   AND   
            ///CT3_CTIPDOC='FT'   AND   
            ///CT3_CNUMDOC='001-00000001' 
            ///

            if (docuemnto3 != null)
            {//anula
                _db.PAG0009CAR3s.DeleteOnSubmit(docuemnto3);
            }
            _db.SubmitChanges();

        }
        private void DeleteGesPagVerif0010_QOUYLLUR(dbGespagDataContext _db, RecepcionDoc recepcionDoc)
        {
            var docuemnto = _db.PAG0010CAR1s.SingleOrDefault
                   (p => p.CT1_CTIPANE == recepcionDoc.tipoProveedor &
                   p.CT1_CCODANE == recepcionDoc.ruc.Trim() &
                   p.CT1_CCODSUC == "0001" &
                   p.CT1_CDATEXT == recepcionDoc.idInternal.ToString() &
                   p.CT1_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                   p.CT1_CNUMDOC == recepcionDoc.numDocumento);

            if (docuemnto != null)
            {//anula

                if (docuemnto.CT1_CESTADO == 'C')
                {
                    throw new Exception("El documento {0}/{1} esta en Cartera GESPAG".Fmt(recepcionDoc.DocumentoTipo.abreviacion, recepcionDoc.numDocumento));
                }
                _db.PAG0010CAR1s.DeleteOnSubmit(docuemnto);
            }
            var docuemnto2 = _db.PAG0010CAR2s.SingleOrDefault
                    (p => p.CT2_CTIPANE == recepcionDoc.tipoProveedor &
                    p.CT2_CCODANE == recepcionDoc.ruc.Trim() &
                    p.CT2_CCODSUC == "0001" &
                    p.CT2_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                    p.CT2_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR2  WHERE CT2_CTIPANE='P'   AND 
            ///CT2_CCODANE='20100025915'   AND   
            ///CT2_CCODSUC='0001'   AND   
            ///CT2_CTIPDOC='FT'   AND   
            ///CT2_CNUMDOC='001-00000001' 

            if (docuemnto2 != null)
            {//anula
                _db.PAG0010CAR2s.DeleteOnSubmit(docuemnto2);
            }
            var docuemnto3 = _db.PAG0010CAR3s.SingleOrDefault
                  (p => p.CT3_CTIPANE == recepcionDoc.tipoProveedor &
                  p.CT3_CCODANE == recepcionDoc.ruc.Trim() &
                  p.CT3_CCODSUC == "0001" &
                  p.CT3_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                  p.CT3_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR3  WHERE CT3_CTIPANE='P'   AND   
            ///CT3_CCODANE='20100025915'   AND   
            ///CT3_CCODSUC='0001'   AND   
            ///CT3_CTIPDOC='FT'   AND   
            ///CT3_CNUMDOC='001-00000001' 
            ///

            if (docuemnto3 != null)
            {//anula
                _db.PAG0010CAR3s.DeleteOnSubmit(docuemnto3);
            }
            _db.SubmitChanges();

        }
        private void DeleteGesPagVerif0011_PROMOTORAINMOBILIARIA(dbGespagDataContext _db, RecepcionDoc recepcionDoc)
        {
            var docuemnto = _db.PAG0011CAR1s.SingleOrDefault
                   (p => p.CT1_CTIPANE == recepcionDoc.tipoProveedor &
                   p.CT1_CCODANE == recepcionDoc.ruc.Trim() &
                   p.CT1_CCODSUC == "0001" &
                   p.CT1_CDATEXT == recepcionDoc.idInternal.ToString() &
                   p.CT1_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                   p.CT1_CNUMDOC == recepcionDoc.numDocumento);

            if (docuemnto != null)
            {//anula

                if (docuemnto.CT1_CESTADO == 'C')
                {
                    throw new Exception("El documento {0}/{1} esta en Cartera GESPAG".Fmt(recepcionDoc.DocumentoTipo.abreviacion, recepcionDoc.numDocumento));
                }
                _db.PAG0011CAR1s.DeleteOnSubmit(docuemnto);
            }
            var docuemnto2 = _db.PAG0011CAR2s.SingleOrDefault
                    (p => p.CT2_CTIPANE == recepcionDoc.tipoProveedor &
                    p.CT2_CCODANE == recepcionDoc.ruc.Trim() &
                    p.CT2_CCODSUC == "0001" &
                    p.CT2_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                    p.CT2_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR2  WHERE CT2_CTIPANE='P'   AND 
            ///CT2_CCODANE='20100025915'   AND   
            ///CT2_CCODSUC='0001'   AND   
            ///CT2_CTIPDOC='FT'   AND   
            ///CT2_CNUMDOC='001-00000001' 

            if (docuemnto2 != null)
            {//anula
                _db.PAG0011CAR2s.DeleteOnSubmit(docuemnto2);
            }
            var docuemnto3 = _db.PAG0011CAR3s.SingleOrDefault
                  (p => p.CT3_CTIPANE == recepcionDoc.tipoProveedor &
                  p.CT3_CCODANE == recepcionDoc.ruc.Trim() &
                  p.CT3_CCODSUC == "0001" &
                  p.CT3_CTIPDOC == recepcionDoc.DocumentoTipo.pg_TIPODOC &
                  p.CT3_CNUMDOC == recepcionDoc.numDocumento);

            ///DELETE FROM GESPAG..PAG0002CAR3  WHERE CT3_CTIPANE='P'   AND   
            ///CT3_CCODANE='20100025915'   AND   
            ///CT3_CCODSUC='0001'   AND   
            ///CT3_CTIPDOC='FT'   AND   
            ///CT3_CNUMDOC='001-00000001' 
            ///

            if (docuemnto3 != null)
            {//anula
                _db.PAG0011CAR3s.DeleteOnSubmit(docuemnto3);
            }
            _db.SubmitChanges();

        }
        


        private void DeleteGesPAG(RecepcionDoc recepcionDoc)
        {

            dbGespagDataContext _db = new dbGespagDataContext(Parametros.dbGesPag);


            switch (recepcionDoc.Obra.Proyecto.idEmpresa)
            {
                case 6:
                //0002	ESPARQ  CIESA CONTRATISTAS GRALES SAC--20132373524   --> 6
                    this.DeleteGesPagVerif0002_CIESA(_db, recepcionDoc);
                    break;
                case 14:
                    //0004	ESPINOSA ARQUITECTOS S.A.C.-- 20516094096    --> 14
                    this.DeleteGesPagVerif0004_ESPINOSA(_db, recepcionDoc);
                    break;

                case 7:
                    //0005	CLASEM S.A.C.              --20516390060     --> 7
                    this.DeleteGesPagVerif0005_CLASEM(_db, recepcionDoc);
                    break;
                case 24:
                    //0006	VIAS Y CAMINOS S.A.C.      --20491897610     -->  24
                    this.DeleteGesPagVerif0006_VIASCAMINOS(_db, recepcionDoc);
                    break;
                case 13:
                    //0007	EOM GRUPO S.A.             --20519227356     --> 13
                    this.DeleteGesPagVerif0007_EOMGRUPO(_db, recepcionDoc);
                    break;
                case 21:
                    //0008	EOM INVERSIONES S.A.        --20549240381    --> 21
                    this.DeleteGesPagVerif0008_EOMINVERCIONES(_db, recepcionDoc);
                    break;
                case 22:
                    //0009	PROMOTORA DE VIVIENDAS CHAO S.A.--20550461073 --> 22
                    this.DeleteGesPagVerif0009_PROMVIVIENDACHAO(_db, recepcionDoc);
                    break;
                case 20:
                    //0010	QOUYLLUR S.A.C      --20490299930     -->20
                    this.DeleteGesPagVerif0010_QOUYLLUR(_db, recepcionDoc);
                    break;
                case 23:
                    //0011	PROMOTORA INMOBILIARIA INDUSTRIAL DE PIURA SAC--20552275862  -->23
                    this.DeleteGesPagVerif0011_PROMOTORAINMOBILIARIA(_db, recepcionDoc);
                    break;
                default:
                    break;
            }

           
              
        }
        private void AddGesPag(dbGespagDataContext _db, 
                                DocumentoCompraInfo item,
                                string glosa,
                                int idRecepcinoDoc, 
                                int idEmpresa, 
                                string centroCosto)
        {

             using (TransactionScope ts = new TransactionScope())
              {
                  try
                  {

                  
                 // de  acuerdo que  lo analisado , si biene de  caja chica se verifica los documentos ingresados y se registran en el gespag
               var valor=Convert.ToChar("M");  ///informacion del programador GESPAG

                     //verificar si existe el proveedor en GESPAG
                     //verificar la empresa a la cual debemos descargar
                     //debe existir un campo donce colocar mi ID
                     //no guarda  planilla ni gastos financieros.
                     // Nota de credito

                    //0001	DEMO SAC    --205103622243
                    //0003	ESPARQ CONSTRUCCION SAC.   --20519488401     --> NO EXISTE

               switch (idEmpresa)
               {
                   case 6:
                       //0002	ESPARQ  CIESA CONTRATISTAS GRALES SAC--20132373524   --> 6
                       this.AddGesPagVerif0002_CIESA(_db, item, glosa, idRecepcinoDoc, centroCosto);
                       break;
                   case 14:
                       //0004	ESPINOSA ARQUITECTOS S.A.C.-- 20516094096    --> 14
                       this.AddGesPagVerif0004_ESPINOSA(_db, item,glosa, idRecepcinoDoc, centroCosto);
                       break;

                   case 7:
                       //0005	CLASEM S.A.C.              --20516390060     --> 7
                       this.AddGesPagVerif0005_CLASEM(_db, item, glosa,idRecepcinoDoc, centroCosto);
                       break;
                   case 24:
                       //0006	VIAS Y CAMINOS S.A.C.      --20491897610     -->  24
                       this.AddGesPagVerif0006_VIASCAMINOS(_db, item,glosa, idRecepcinoDoc, centroCosto);
                       break;
                   case 13:
                       //0007	EOM GRUPO S.A.             --20519227356     --> 13
                       this.AddGesPagVerif0007_EOMGRUPO(_db, item,glosa, idRecepcinoDoc, centroCosto);
                       break;
                   case 21:
                       //0008	EOM INVERSIONES S.A.        --20549240381    --> 21
                       this.AddGesPagVerif0008_EOMINVERCIONES(_db, item,glosa, idRecepcinoDoc, centroCosto);
                       break;
                   case 22:
                       //0009	PROMOTORA DE VIVIENDAS CHAO S.A.--20550461073 --> 22
                       this.AddGesPagVerif0009_PROMVIVIENDACHAO(_db, item,glosa, idRecepcinoDoc, centroCosto);
                       break;
                   case 20:
                       //0010	QOUYLLUR S.A.C      --20490299930     -->20
                       this.AddGesPagVerif0010_QOUYLLUR(_db, item,glosa, idRecepcinoDoc, centroCosto);
                       break;
                   case 23:
                       //0011	PROMOTORA INMOBILIARIA INDUSTRIAL DE PIURA SAC--20552275862  -->23
                       this.AddGesPagVerif0011_PROMOTORAINMOBILIARIA(_db, item,glosa, idRecepcinoDoc, centroCosto);
                       break;
                   default:
                       break;
               }
           
                  
              ts.Complete();
                  }
                
                  catch (SqlException sqlex)
                  {

                      throw new Exception("{0}-{1}".Fmt(item.idInternal, sqlex));
                  }

                  catch (Exception ex)
                  {

                      throw new Exception("{0}-{1}".Fmt(item.idInternal, ex));
                  }
            }

        }
      
        private void AddGesPagVerif0002_CIESA( dbGespagDataContext _db,
                                                DocumentoCompraInfo item,
                                                string glosa,
                                                int idRecepcionDoc,
                                                string centroCosto)
        {

               //importate saber si es de  cajachica o rendicion
                //var cuentaContable = string.Empty;  ///informacion del programador GESPAG
                //string tipoProvicion                                                
                //  item.SetTipoAcreedor(cuentaContable,

            
                var valor = Convert.ToChar("M");  ///informacion del programador GESPAG
                    //verifircamos la existencia de documentos
                 var pag0002CAR = _db.PAG0002CAR1s.SingleOrDefault
                    (p => p.CT1_CTIPANE == item.tipoProveedor &
                    p.CT1_CCODANE == item.RUC &
                    p.CT1_CCODSUC == "0001" &
                    p.CT1_CTIPDOC == item.tipoDocumento &
                    p.CT1_CNUMDOC == item.numDocumento);

                 if (pag0002CAR == null)
                 {
                     var tipoDoc = Convert.ToChar(item.tipoProveedor);
                     var rdocumento = new PAG0002CAR1();
                     if (tipoDoc == 'P')
                     {
                         //facturas,boletas, notas de credito, notas de debito, avions,trasporte tikets

                         rdocumento.SetAddP(_db,
                                       Convert.ToChar(item.tipoProveedor),
                                       item.RUC,
                                       item.tipoDocumento,
                                       item.numDocumento,
                                       item.fechaEmision,
                                       item.fechaVencimiento,
                                       item.numDiasVen,
                                       item.fechaPago,
                                       item.idMoneda,
                                       item.tipoCambio,
                                       valor,
                                       glosa,
                                       item.totalDoc,
                                       item.igvDoc,
                                       item.impInafecto,
                                       item.totalMN,
                                       item.totalUS,
                                       item.impISC,
                                       "sist",
                                       idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);

                     }
                     if (tipoDoc == 'H')
                     {
                         rdocumento.SetAddH(_db,
                                      item.RUC,
                                      item.tipoDocumento,
                                      item.numDocumento,
                                      item.fechaEmision,
                                      item.fechaVencimiento,
                                      item.numDiasVen,
                                      item.fechaPago,
                                      item.idMoneda,
                                      item.tipoCambio,
                                      valor,
                                      glosa,
                                      item.importeNeto,
                                      item.totalMN,
                                      item.totalUS,
                                      item.Renta4ta,
                                      "sist", 
                                      idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);
                     }
                     _db.SubmitChanges();
                 }
        }

        private void AddGesPagVerif0004_ESPINOSA(dbGespagDataContext _db,
                                              DocumentoCompraInfo item,
                                                string glosa,
                                              int idRecepcionDoc
                                                ,string centroCosto)
        {
            var valor = Convert.ToChar("M");  ///informacion del programador GESPAG
            //verifircamos la existencia de documentos
            var pag0004CAR = _db.PAG0004CAR1s.SingleOrDefault
               (p => p.CT1_CTIPANE == item.tipoProveedor &
               p.CT1_CCODANE == item.RUC &
               p.CT1_CCODSUC == "0001" &
               p.CT1_CTIPDOC == item.tipoDocumento &
               p.CT1_CNUMDOC == item.numDocumento);

            if (pag0004CAR == null)
            {
                var tipoDoc = Convert.ToChar(item.tipoProveedor);
                var rdocumento = new PAG0004CAR1();
                if (tipoDoc == 'P')
                {
                    //facturas,boletas, notas de credito, notas de debito, avions,trasporte tikets

                    rdocumento.SetAddP(_db,
                                  Convert.ToChar(item.tipoProveedor),
                                  item.RUC,
                                  item.tipoDocumento,
                                  item.numDocumento,
                                  item.fechaEmision,
                                  item.fechaVencimiento,
                                  item.numDiasVen,
                                  item.fechaPago,
                                  item.idMoneda,
                                  item.tipoCambio,
                                  valor,
                                  glosa,
                                  item.totalDoc,
                                  item.igvDoc,
                                  item.impInafecto,
                                  item.totalMN,
                                  item.totalUS,
                                  item.impISC,
                                  "sist",
                                  idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);

                }
                if (tipoDoc == 'H')
                {
                    rdocumento.SetAddH(_db,
                                 item.RUC,
                                 item.tipoDocumento,
                                 item.numDocumento,
                                 item.fechaEmision,
                                 item.fechaVencimiento,
                                 item.numDiasVen,
                                 item.fechaPago,
                                 item.idMoneda,
                                 item.tipoCambio,
                                 valor,
                                glosa,
                                 item.importeNeto,
                                 item.totalMN,
                                 item.totalUS,
                                 item.Renta4ta,
                                 "sist",
                                 idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);
                }
                _db.SubmitChanges();
            }
        }




        private void AddGesPagVerif0005_CLASEM(dbGespagDataContext _db,
                                              DocumentoCompraInfo item,
                                              string glosa,
                                              int idRecepcionDoc, 
                                              string centroCosto)
        {
           
            
            var valor = Convert.ToChar("M");  ///informacion del programador GESPAG
            //verifircamos la existencia de documentos
            var pag0005CAR = _db.PAG0005CAR1s.SingleOrDefault
               (p => p.CT1_CTIPANE == item.tipoProveedor &
               p.CT1_CCODANE == item.RUC &
               p.CT1_CCODSUC == "0001" &
               p.CT1_CTIPDOC == item.tipoDocumento &
               p.CT1_CNUMDOC == item.numDocumento);

            if (pag0005CAR == null)
            {
                var tipoDoc = Convert.ToChar(item.tipoProveedor);
                var rdocumento = new PAG0005CAR1();
                if (tipoDoc == 'P')
                {
                    //facturas,boletas, notas de credito, notas de debito, avions,trasporte tikets

                    rdocumento.SetAddP(_db,
                                  Convert.ToChar(item.tipoProveedor),
                                  item.RUC,
                                  item.tipoDocumento,
                                  item.numDocumento,
                                  item.fechaEmision,
                                  item.fechaVencimiento,
                                  item.numDiasVen,
                                  item.fechaPago,
                                  item.idMoneda,
                                  item.tipoCambio,
                                  valor,
                                  glosa,
                                  item.totalDoc,
                                  item.igvDoc,
                                  item.impInafecto,
                                  item.totalMN,
                                  item.totalUS,
                                  item.impISC,
                                  "sist",
                                  idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);

                }
                if (tipoDoc == 'H')
                {
                    rdocumento.SetAddH(_db,
                                 item.RUC,
                                 item.tipoDocumento,
                                 item.numDocumento,
                                 item.fechaEmision,
                                 item.fechaVencimiento,
                                 item.numDiasVen,
                                 item.fechaPago,
                                 item.idMoneda,
                                 item.tipoCambio,
                                 valor,
                                 glosa,
                                 item.importeNeto,
                                 item.totalMN,
                                 item.totalUS,
                                 item.Renta4ta,
                                 "sist",
                                 idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);
                }
                _db.SubmitChanges();
            }
           
        }

        private void AddGesPagVerif0006_VIASCAMINOS(dbGespagDataContext _db,
                                              DocumentoCompraInfo item,
                                                 string glosa,
                                              int idRecepcionDoc, string centroCosto)
        {
            var valor = Convert.ToChar("M");  ///informacion del programador GESPAG
            //verifircamos la existencia de documentos
            var pag0006CAR = _db.PAG0006CAR1s.SingleOrDefault
               (p => p.CT1_CTIPANE == item.tipoProveedor &
               p.CT1_CCODANE == item.RUC &
               p.CT1_CCODSUC == "0001" &
               p.CT1_CTIPDOC == item.tipoDocumento &
               p.CT1_CNUMDOC == item.numDocumento);

            if (pag0006CAR == null)
            {
                var tipoDoc = Convert.ToChar(item.tipoProveedor);
                var rdocumento = new PAG0006CAR1();
                if (tipoDoc == 'P')
                {
                    //facturas,boletas, notas de credito, notas de debito, avions,trasporte tikets

                    rdocumento.SetAddP(_db,
                                  Convert.ToChar(item.tipoProveedor),
                                  item.RUC,
                                  item.tipoDocumento,
                                  item.numDocumento,
                                  item.fechaEmision,
                                  item.fechaVencimiento,
                                  item.numDiasVen,
                                  item.fechaPago,
                                  item.idMoneda,
                                  item.tipoCambio,
                                  valor,
                                  glosa,
                                  item.totalDoc,
                                  item.igvDoc,
                                  item.impInafecto,
                                  item.totalMN,
                                  item.totalUS,
                                  item.impISC,
                                  "sist",
                                  idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);

                }
                if (tipoDoc == 'H')
                {
                    rdocumento.SetAddH(_db,
                                 item.RUC,
                                 item.tipoDocumento,
                                 item.numDocumento,
                                 item.fechaEmision,
                                 item.fechaVencimiento,
                                 item.numDiasVen,
                                 item.fechaPago,
                                 item.idMoneda,
                                 item.tipoCambio,
                                 valor,
                                 glosa,
                                 item.importeNeto,
                                 item.totalMN,
                                 item.totalUS,
                                 item.Renta4ta,
                                 "sist",
                                 idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);
                }
                _db.SubmitChanges();
            }
        }

        private void AddGesPagVerif0007_EOMGRUPO(dbGespagDataContext _db,
                                              DocumentoCompraInfo item,
                                               string glosa,
                                              int idRecepcionDoc, string centroCosto)
        {
            var valor = Convert.ToChar("M");  ///informacion del programador GESPAG
            //verifircamos la existencia de documentos
            var pag0007CAR = _db.PAG0007CAR1s.SingleOrDefault
               (p => p.CT1_CTIPANE == item.tipoProveedor &
               p.CT1_CCODANE == item.RUC &
               p.CT1_CCODSUC == "0001" &
               p.CT1_CTIPDOC == item.tipoDocumento &
               p.CT1_CNUMDOC == item.numDocumento);

            if (pag0007CAR == null)
            {
                var tipoDoc = Convert.ToChar(item.tipoProveedor);
                var rdocumento = new PAG0007CAR1();
                if (tipoDoc == 'P')
                {
                    //facturas,boletas, notas de credito, notas de debito, avions,trasporte tikets

                    rdocumento.SetAddP(_db,
                                  Convert.ToChar(item.tipoProveedor),
                                  item.RUC,
                                  item.tipoDocumento,
                                  item.numDocumento,
                                  item.fechaEmision,
                                  item.fechaVencimiento,
                                  item.numDiasVen,
                                  item.fechaPago,
                                  item.idMoneda,
                                  item.tipoCambio,
                                  valor,
                                  glosa,
                                  item.totalDoc,
                                  item.igvDoc,
                                  item.impInafecto,
                                  item.totalMN,
                                  item.totalUS,
                                  item.impISC,
                                  "sist",
                                  idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);

                }
                if (tipoDoc == 'H')
                {
                    rdocumento.SetAddH(_db,
                                 item.RUC,
                                 item.tipoDocumento,
                                 item.numDocumento,
                                 item.fechaEmision,
                                 item.fechaVencimiento,
                                 item.numDiasVen,
                                 item.fechaPago,
                                 item.idMoneda,
                                 item.tipoCambio,
                                 valor,
                                 glosa,
                                 item.importeNeto,
                                 item.totalMN,
                                 item.totalUS,
                                 item.Renta4ta,
                                 "sist",
                                 idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);
                }
                _db.SubmitChanges();
            }
        }


        private void AddGesPagVerif0008_EOMINVERCIONES(dbGespagDataContext _db,
                                              DocumentoCompraInfo item,
                                                 string glosa,
                                              int idRecepcionDoc, string centroCosto)
        {
            var valor = Convert.ToChar("M");  ///informacion del programador GESPAG
            //verifircamos la existencia de documentos
            var pag0008CAR = _db.PAG0008CAR1s.SingleOrDefault
               (p => p.CT1_CTIPANE == item.tipoProveedor &
               p.CT1_CCODANE == item.RUC &
               p.CT1_CCODSUC == "0001" &
               p.CT1_CTIPDOC == item.tipoDocumento &
               p.CT1_CNUMDOC == item.numDocumento);

            if (pag0008CAR == null)
            {
                var tipoDoc = Convert.ToChar(item.tipoProveedor);
                var rdocumento = new PAG0008CAR1();
                if (tipoDoc == 'P')
                {
                    //facturas,boletas, notas de credito, notas de debito, avions,trasporte tikets

                    rdocumento.SetAddP(_db,
                                  Convert.ToChar(item.tipoProveedor),
                                  item.RUC,
                                  item.tipoDocumento,
                                  item.numDocumento,
                                  item.fechaEmision,
                                  item.fechaVencimiento,
                                  item.numDiasVen,
                                  item.fechaPago,
                                  item.idMoneda,
                                  item.tipoCambio,
                                  valor,
                                  glosa,
                                  item.totalDoc,
                                  item.igvDoc,
                                  item.impInafecto,
                                  item.totalMN,
                                  item.totalUS,
                                  item.impISC,
                                  "sist",
                                  idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);

                }
                if (tipoDoc == 'H')
                {
                    rdocumento.SetAddH(_db,
                                 item.RUC,
                                 item.tipoDocumento,
                                 item.numDocumento,
                                 item.fechaEmision,
                                 item.fechaVencimiento,
                                 item.numDiasVen,
                                 item.fechaPago,
                                 item.idMoneda,
                                 item.tipoCambio,
                                 valor,
                                 glosa,
                                 item.importeNeto,
                                 item.totalMN,
                                 item.totalUS,
                                 item.Renta4ta,
                                 "sist",
                                 idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);
                }
                _db.SubmitChanges();
            }
        }


        private void AddGesPagVerif0009_PROMVIVIENDACHAO(dbGespagDataContext _db,
                                              DocumentoCompraInfo item,
                                              string glosa,
                                              int idRecepcionDoc,string centroCosto)
        {
            var valor = Convert.ToChar("M");  ///informacion del programador GESPAG
            //verifircamos la existencia de documentos
            var pag0009CAR = _db.PAG0009CAR1s.SingleOrDefault
               (p => p.CT1_CTIPANE == item.tipoProveedor &
               p.CT1_CCODANE == item.RUC &
               p.CT1_CCODSUC == "0001" &
               p.CT1_CTIPDOC == item.tipoDocumento &
               p.CT1_CNUMDOC == item.numDocumento);

            if (pag0009CAR == null)
            {
                var tipoDoc = Convert.ToChar(item.tipoProveedor);
                var rdocumento = new PAG0004CAR1();
                if (tipoDoc == 'P')
                {
                    //facturas,boletas, notas de credito, notas de debito, avions,trasporte tikets

                    rdocumento.SetAddP(_db,
                                  Convert.ToChar(item.tipoProveedor),
                                  item.RUC,
                                  item.tipoDocumento,
                                  item.numDocumento,
                                  item.fechaEmision,
                                  item.fechaVencimiento,
                                  item.numDiasVen,
                                  item.fechaPago,
                                  item.idMoneda,
                                  item.tipoCambio,
                                  valor,
                                  glosa,
                                  item.totalDoc,
                                  item.igvDoc,
                                  item.impInafecto,
                                  item.totalMN,
                                  item.totalUS,
                                  item.impISC,
                                  "sist",
                                  idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);

                }
                if (tipoDoc == 'H')
                {
                    rdocumento.SetAddH(_db,
                                 item.RUC,
                                 item.tipoDocumento,
                                 item.numDocumento,
                                 item.fechaEmision,
                                 item.fechaVencimiento,
                                 item.numDiasVen,
                                 item.fechaPago,
                                 item.idMoneda,
                                 item.tipoCambio,
                                 valor,
                                 glosa,
                                 item.importeNeto,
                                 item.totalMN,
                                 item.totalUS,
                                 item.Renta4ta,
                                 "sist",
                                 idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);
                }
                _db.SubmitChanges();
            }
        }

        private void AddGesPagVerif0010_QOUYLLUR(dbGespagDataContext _db,
                                              DocumentoCompraInfo item,
                                                string glosa,
                                              int idRecepcionDoc,string centroCosto)
        {
             var valor = Convert.ToChar("M");  ///informacion del programador GESPAG
            //verifircamos la existencia de documentos
            var pag0010CAR = _db.PAG0010CAR1s.SingleOrDefault
               (p => p.CT1_CTIPANE == item.tipoProveedor &
               p.CT1_CCODANE == item.RUC &
               p.CT1_CCODSUC == "0001" &
               p.CT1_CTIPDOC == item.tipoDocumento &
               p.CT1_CNUMDOC == item.numDocumento);

            if (pag0010CAR == null)
            {
                var tipoDoc = Convert.ToChar(item.tipoProveedor);
                var rdocumento = new PAG0010CAR1();
                if (tipoDoc == 'P')
                {
                    //facturas,boletas, notas de credito, notas de debito, avions,trasporte tikets

                    rdocumento.SetAddP(_db,
                                  Convert.ToChar(item.tipoProveedor),
                                  item.RUC,
                                  item.tipoDocumento,
                                  item.numDocumento,
                                  item.fechaEmision,
                                  item.fechaVencimiento,
                                  item.numDiasVen,
                                  item.fechaPago,
                                  item.idMoneda,
                                  item.tipoCambio,
                                  valor,
                                  glosa,
                                  item.totalDoc,
                                  item.igvDoc,
                                  item.impInafecto,
                                  item.totalMN,
                                  item.totalUS,
                                  item.impISC,
                                  "sist",
                                  idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);

                }
                if (tipoDoc == 'H')
                {
                    rdocumento.SetAddH(_db,
                                 item.RUC,
                                 item.tipoDocumento,
                                 item.numDocumento,
                                 item.fechaEmision,
                                 item.fechaVencimiento,
                                 item.numDiasVen,
                                 item.fechaPago,
                                 item.idMoneda,
                                 item.tipoCambio,
                                 valor,
                                 item.glosa,
                                 item.importeNeto,
                                 item.totalMN,
                                 item.totalUS,
                                 item.Renta4ta,
                                 "sist",
                                 idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);
                }
                _db.SubmitChanges();
            }
            
        }


        private void AddGesPagVerif0011_PROMOTORAINMOBILIARIA(dbGespagDataContext _db,
                                              DocumentoCompraInfo item,
                                                string glosa,
                                              int idRecepcionDoc,string centroCosto)
        {
             var valor = Convert.ToChar("M");  ///informacion del programador GESPAG
            //verifircamos la existencia de documentos
            var pag0004CAR = _db.PAG0004CAR1s.SingleOrDefault
               (p => p.CT1_CTIPANE == item.tipoProveedor &
               p.CT1_CCODANE == item.RUC &
               p.CT1_CCODSUC == "0001" &
               p.CT1_CTIPDOC == item.tipoDocumento &
               p.CT1_CNUMDOC == item.numDocumento);

            if (pag0004CAR == null)
            {
                var tipoDoc = Convert.ToChar(item.tipoProveedor);
                var rdocumento = new PAG0004CAR1();
                if (tipoDoc == 'P')
                {
                    //facturas,boletas, notas de credito, notas de debito, avions,trasporte tikets

                    rdocumento.SetAddP(_db,
                                  Convert.ToChar(item.tipoProveedor),
                                  item.RUC,
                                  item.tipoDocumento,
                                  item.numDocumento,
                                  item.fechaEmision,
                                  item.fechaVencimiento,
                                  item.numDiasVen,
                                  item.fechaPago,
                                  item.idMoneda,
                                  item.tipoCambio,
                                  valor,
                                  glosa,
                                  item.totalDoc,
                                  item.igvDoc,
                                  item.impInafecto,
                                  item.totalMN,
                                  item.totalUS,
                                  item.impISC,
                                  "sist",
                                  idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);

                }
                if (tipoDoc == 'H')
                {
                    rdocumento.SetAddH(_db,
                                 item.RUC,
                                 item.tipoDocumento,
                                 item.numDocumento,
                                 item.fechaEmision,
                                 item.fechaVencimiento,
                                 item.numDiasVen,
                                 item.fechaPago,
                                 item.idMoneda,
                                 item.tipoCambio,
                                 valor,
                                 glosa,
                                 item.importeNeto,
                                 item.totalMN,
                                 item.totalUS,
                                 item.Renta4ta,
                                 "sist",
                                 idRecepcionDoc,
                                       centroCosto,
                                       item.cuentaContable,
                                       item.tipoProvicion,
                                       item.tipoAnexo,
                                       item.anexo);
                }
                _db.SubmitChanges();
            }
            
        }
        

       
        public int update(
                     int idRecepcionDoc,
                    string descripcion,
                    string numDocumento,
                    int tipoDocumento,
                    int idmoneda,
                    decimal totalMonOrig,
                    decimal total,
                    decimal neto,
                    decimal igvtotal,
                    DateTime fechaEmisionDoc,
                    DateTime fechaVencimientoDoc,
                    DateTime fecha,
                    DateTime? fechaPago,
                    int idOrdenCompra,
                    int idObra,
                    decimal tipoCambioDollar)
        {


            using (dbGestionDataContext _db = new dbGestionDataContext(Parametros.strConnString))
            {


                int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());

                RecepcionDoc recepcion = _db.RecepcionDocs.Single(p=>p.idInternal==idRecepcionDoc);
                recepcion.update(_db,
                    idOrdenCompra,
                    idObra,
                    descripcion,
                    numDocumento,
                    tipoDocumento,
                    idmoneda,
                    totalMonOrig,
                    total,
                    neto,
                    igvtotal,
                    fechaEmisionDoc,
                    fechaVencimientoDoc,
                    fecha,
                    fechaPago,
                    tipoCambioDollar,
                    idEmpleadoEmisor);

                return recepcion.idInternal;


            }



        }

        public void Delete(int idRecepcionDoc)
        {
            
            using (TransactionScope ts = new TransactionScope())
            {
                dbGestionDataContext _db = new dbGestionDataContext(Parametros.strConnString);

                int idEmpleadoEmisor = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
               
                

                RecepcionDoc recep = _db.RecepcionDocs.Single(p => p.idInternal == idRecepcionDoc);
                OrdenCompra oc = _db.OrdenCompras.Single(p => p.idInternal == recep.idOrden);

                //-----------------------------------------------------
                bool acceso = new FormularioAcceso().VerificarAcceso(_db,
                    idEmpleadoEmisor,
                    9, //FR
                    recep.idObra.Value,
                    4); //creacion
                //----------------------------------------------------


                // si  pertence a un caja chica se busca todos los relacionados 
                // y los  elimanamos 

                if (oc.idTipoOrden==5)  ///caja chica
                {
                    var losotros = from a in DbUtil.Db.RecepcionDocs
                            where a.idOrden == recep.idOrden
                            & a.idInternal!=recep.idInternal
                            select a.idInternal;

                    foreach (var item in losotros)
                    {

                        var recepDoc = _db.RecepcionDocs.Single(p => p.idInternal == item);
                        _db.RecepcionDocs.DeleteOnSubmit(recepDoc);
                     this.DeleteGesPAG(recepDoc);
                        _db.SubmitChanges();
                    }


                }

                this.DeleteGesPAG(recep);
                _db.RecepcionDocs.DeleteOnSubmit(recep);
                 _db.SubmitChanges();

                 decimal totalFacturado = recep.GetTotalFacturadoXOrdenCompra(_db, oc.idInternal);
                decimal totalOrdenCompra = oc.total.Value;

                if (totalFacturado == 0)
                {
                    oc.idEstado = 13;// Aprobado 
                }
                else
                {
                 if (Math.Abs(totalOrdenCompra-totalFacturado)==0)
                     oc.idEstado = 42;// facturado 
                 else
                     oc.idEstado = 43;// facturado   parcial NOTA DE CREDITO
                   
                }
                
                _db.SubmitChanges();

                ts.Complete();

            }


        }


        #endregion

        #region "get Lista"


        int _count;

        public int Count(int idObra,
             string proveedor,
             string numDocumento,
            int tipoDocumento,
            int startRowIndex,
            int maximumRows,
            string sortExpression)
        {
            return _count;
        }


        public int Count(int idObra,
            string proveedor,
            string numDocumento,
           int tipoDocumento,
           DateTime fechaInicio,
           DateTime fechaFin,
           int startRowIndex,
           int maximumRows,
           string sortExpression)
        {
            return _count;
        }

        public int Count(int idComparativo,
           int startRowIndex,
           int maximumRows,
           string sortExpression)
        {
            return _count;
        }

     [DataObjectMethod(DataObjectMethodType.Select, false)]
        public IEnumerable<RecepcionDocListInfo> GetRecepcionDocList(int idObra,
             string proveedor,
             string numDocumento,  
            int tipoDocumento,
            DateTime fechaInicio,
            DateTime fechaFin,
            int startRowIndex,
            int maximumRows,
            string sortExpression)
        {
            if (!proveedor.HasValue())
                proveedor = "";
            if (!numDocumento.HasValue())
                numDocumento = "";


            
           var q = ApplySelect_RecepcionDocListInfo();
            q = q.Where(a => a.idObra == idObra & a.fecha > fechaInicio & a.fecha < fechaFin.AddDays(1)
                & a.proveedor.Contains(proveedor)
                & a.numDocumento.Contains(numDocumento)
                & (tipoDocumento==0?a.idTipodocumento!=0 :a.idTipodocumento== tipoDocumento)
                
                );
            _count = q.Count();
            q = ApplySort(q, sortExpression);
            return q.Skip(startRowIndex).Take(maximumRows);

         

        }



     [DataObjectMethod(DataObjectMethodType.Select, false)]
     public IEnumerable<RecepcionDocListInfo> GetRecepcionDocList(int idObra,
          string proveedor,
          string numDocumento,
         int tipoDocumento,
         int startRowIndex,
         int maximumRows,
         string sortExpression)
     {
         if (!proveedor.HasValue())
             proveedor = "";
         if (!numDocumento.HasValue())
             numDocumento = "";



         var q = ApplySelect_RecepcionDocListInfo();
         q = q.Where(a => a.proveedor.Contains(proveedor)
             & a.numDocumento.Contains(numDocumento)
             & a.idObra==idObra
             & (tipoDocumento == 0 ? a.idTipodocumento != 0 : a.idTipodocumento == tipoDocumento)

             );
         _count = q.Count();
         q = ApplySort(q, sortExpression);
         return q.Skip(startRowIndex).Take(maximumRows);



     }
     




     [DataObjectMethod(DataObjectMethodType.Select, false)]
     public List<RecepcionDocListInfo> GetRecepcionDocList(int idComparativo,
         int startRowIndex,
         int maximumRows,
         string sortExpression)
     {
         
         var q = ApplySelect_RecepcionDocListInfo();
         q = q.Where(a => a.idComparativo == idComparativo);
         _count = q.Count();
         q = ApplySort(q, sortExpression);
         return q.Skip(startRowIndex).Take(maximumRows).ToList();

     }


     private IQueryable<RecepcionDocListInfo> ApplySelect_RecepcionDocListInfo()
     {
         string moBase = DbUtil.Db.Monedas.Single(p => p.idInternal == 3).simbol;

         var q = from a in DbUtil.Db.RecepcionDocs
                 select new RecepcionDocListInfo
                 {
                     descripcion = a.descripcion.ToUpper(),
                     fecha = a.fechaRecep.Value,
                     fechaEmisionDoc = a.fechaEmisionDoc.Value,
                     fechaVencimientoDoc = a.fechaVencimientoDoc.Value,
                     idInternal = a.idInternal,
                     idObra = a.idObra.Value,
                     tipoCambioDollar=a.tipoCambio.Value,
                     moneda = a.Moneda.descripcion,
                     
                     numDocumento = a.numDocumento,
                     proveedor =a.proveedor==null?"": a.proveedor, // debe ser asi , para no cambiar al proveedor
                     ruc=a.ruc==null?"":a.ruc,
                     idOrdenCompra = a.idOrden.Value,
                     numRecepcion = a.numRecepcion,
                     simbol = a.Moneda.simbol,
                     tipoDocumento = a.DocumentoTipo.abreviacion,
                     idTipodocumento=a.idTipoDocumento.Value,
                     
                     totalMonOrig = a.totalMonOrig.Value,
                     total = a.totalMN.Value,
                     igvtotal = a.igvtotalMN.Value,
                     neto = a.netoMN.Value,

                     usuarioCre = a.Empleado.descripcion,
                     totalMonOrigStr = String.Format("{0} {1:N}", a.Moneda.simbol, a.totalDoc.Value),
                     totalStr = String.Format("{0} {1:N}", moBase, a.totalMN),
                     netoStr = String.Format("{0} {1:N}", moBase, a.netoMN),
                     igvtotalStr = String.Format("{0} {1:N}", moBase, a.igvtotalMN),

                     fechaEmisionDocStr = a.fechaEmisionDoc.Value.ToShortDateString(),
                     fechaVencimientoDocStr = a.fechaVencimientoDoc.Value.ToShortDateString(),
                     fechaStr = a.fechaRecep.Value.ToShortDateString(),
                     numOrden=a.OrdenCompra.numDocumento,
                     numOrdenstr=String.Format("{0} {1}",a.OrdenCompra.TipoOrden.simbol,a.OrdenCompra.numDocumento),
                     idComparativo=(a.OrdenCompra.idComparativo!=null?a.OrdenCompra.idComparativo.Value:0),
                     tipoFormulario = (a.OrdenCompra.idTipoOrden > 1 ? "GastoObraReadForm.aspx" : "OrdenCompraReadForm.aspx"),

                      
                     
                 };
         return q;
     }


     private IQueryable<RecepcionDocListInfo> ApplySelect_RecepcionDocListInfoExcel()
     {
         string moBase = DbUtil.Db.Monedas.Single(p => p.idInternal == 3).simbol;

         var q = from a in DbUtil.Db.RecepcionDocs
                 select new RecepcionDocListInfo
                 {
                     descripcion = a.descripcion.ToUpper(),
                     fecha = a.fechaRecep.Value,
                     fechaEmisionDoc = a.fechaEmisionDoc.Value,
                     fechaVencimientoDoc = a.fechaVencimientoDoc.Value,
                     tipoCambioDollar = a.tipoCambio.Value,
                     moneda = a.Moneda.descripcion,
                     idObra=a.idObra.Value,
                     idInternal=a.idInternal,
                     numDocumento = a.numDocumento,
                     proveedor = a.OrdenCompra.proveedor, // debe ser asi , para no cambiar al proveedor
                                 idTipodocumento=a.idTipoDocumento.Value,
                     idOrdenCompra = a.idOrden.Value,
                     numRecepcion = a.numRecepcion,
                     simbol = a.Moneda.simbol,
                     tipoDocumento = a.DocumentoTipo.abreviacion,


                     totalMonOrig = a.totalMonOrig.Value,
                     total = a.totalDoc.Value,
                     igvtotal = a.igvDoc.Value,
                     neto = a.netoDoc.Value,

                     usuarioCre = a.Empleado.descripcion,
                     totalMonOrigStr = String.Format("{0} {1:N}", a.Moneda.simbol, a.totalMonOrig.Value),
                     totalStr = String.Format("{0} {1:N}", moBase, a.totalMN),
                     netoStr = String.Format("{0} {1:N}", moBase, a.netoMN),
                     igvtotalStr = String.Format("{0} {1:N}", moBase, a.igvtotalMN),

                     fechaEmisionDocStr = a.fechaEmisionDoc.Value.ToShortDateString(),
                     fechaVencimientoDocStr = a.fechaVencimientoDoc.Value.ToShortDateString(),
                     fechaStr = a.fechaRecep.Value.ToShortDateString(),
                     numOrden = a.OrdenCompra.numDocumento,
                     numOrdenstr = String.Format("{0} {1}", a.OrdenCompra.TipoOrden.simbol, a.OrdenCompra.numDocumento),
                     idComparativo =a.OrdenCompra.idComparativo==null?0: a.OrdenCompra.idComparativo.Value,
                     tipoFormulario = (a.OrdenCompra.idTipoOrden > 1 ? "GastoObraReadForm.aspx" : "OrdenCompraReadForm.aspx"),

                 };
         return q;
     }




     private IQueryable<RecepcionDocListInfo> ApplySort(IQueryable<RecepcionDocListInfo> q, string sortExpression)
     {
         switch (sortExpression)
         {
             case "descripcion":
                 q = q.OrderBy(b => b.descripcion);
                 break;
             case "descripcion DESC":
                 q = q.OrderByDescending(b => b.descripcion);
                 break;
             case "fecha":
                 q = q.OrderBy(b => b.fecha);
                 break;
             case "fecha DESC":
                 q = q.OrderByDescending(b => b.fecha);
                 break;
             case "fechaEmisionDoc":
                 q = q.OrderBy(b => b.fechaEmisionDoc);
                 break;
             case "fechaEmisionDoc DESC":
                 q = q.OrderByDescending(b => b.fechaEmisionDoc);
                 break;

             case "fechaVencimientoDoc":
                 q = q.OrderBy(b => b.fechaVencimientoDoc);
                 break;
             case "fechaVencimientoDoc DESC":
                 q = q.OrderByDescending(b => b.fechaVencimientoDoc);
                 break;


             case "igvtotal":
                 q = q.OrderBy(b => b.igvtotal);
                 break;
             case "igvtotal DESC":
                 q = q.OrderByDescending(b => b.igvtotal);
                 break;


             case "moneda":
                 q = q.OrderBy(b => b.moneda);
                 break;
             case "moneda DESC":
                 q = q.OrderByDescending(b => b.moneda);
                 break;
             case "neto":
                 q = q.OrderBy(b => b.neto);
                 break;
             case "neto DESC":
                 q = q.OrderByDescending(b => b.neto);
                 break;

             case "numDocumento":
                 q = q.OrderBy(b => b.numDocumento);
                 break;
             case "numDocumento DESC":
                 q = q.OrderByDescending(b => b.numDocumento);
                 break;

             case "numOrdenCompra":
                 q = q.OrderBy(b => b.numOrden);
                 break;
             case "numOrdenCompra DESC":
                 q = q.OrderByDescending(b => b.numOrden);
                 break;

             case "numRecepcion":
                 q = q.OrderBy(b => b.numRecepcion);
                 break;
             case "numRecepcion DESC":
                 q = q.OrderByDescending(b => b.numRecepcion);
                 break;

             case "proveedor":
                 q = q.OrderBy(b => b.proveedor);
                 break;
             case "proveedor DESC":
                 q = q.OrderByDescending(b => b.proveedor);
                 break;

             case "tipoDocumento":
                 q = q.OrderBy(b => b.tipoDocumento);
                 break;
             case "tipoDocumento DESC":
                 q = q.OrderByDescending(b => b.tipoDocumento);
                 break;
             case "total":
                 q = q.OrderBy(b => b.total);
                 break;
             case "total DESC":
                 q = q.OrderByDescending(b => b.total);
                 break;
             default:
                 q = q.OrderByDescending(b => b.fecha);
                 break;
         }
         return q;
     }  


        #endregion
     public RecepcionDocInfo loadRecepcionDoc(int idRecepcionDoc)
        {

            var q = from a in DbUtil.Db.RecepcionDocs
                    where a.idInternal == idRecepcionDoc
                    select new RecepcionDocInfo
                    {
                        descripcion = a.descripcion,
                        fecha = a.fechaRecep.Value,
                        fechaEmisionDoc = a.fechaEmisionDoc.Value,
                        fechaVencimientoDoc = a.fechaVencimientoDoc.Value,
                        idInternal = a.idInternal,
                        idObra = a.idObra.Value,
                        idDocumentoTipo=a.idTipoDocumento.Value,
                        idMoneda=a.idmoneda.Value,
                        igvtotal = a.igvtotalMN.Value,
                        moneda = a.Moneda.descripcion,
                        tipoCambioDollar=a.tipoCambio.Value,
                        neto = a.netoMN.Value,
                        formaPago=a.OrdenCompra.FormaPago.descripcion,
                        fechaOrdenCompra=a.OrdenCompra.fechaEmision.Value,
                        numDocumento = a.numDocumento,
                        proveedor = a.OrdenCompra.proveedor,
                        numOrdenCompra = a.OrdenCompra.numDocumento,
                        idOrdenCompra = a.idOrden.Value,
                        numRecepcion = a.numRecepcion,
                        simbol = a.Moneda.simbol,
                        tipoDocumento = a.DocumentoTipo.descripcion,
                        total = a.totalMN.Value,
                        usuarioCre = a.Empleado.descripcion,
                        
                        idOrdenAnticipo=a.idOrdenAnticipo,
                        fechaPago=a.fechaPago,
                        igvDoc=a.igvDoc.Value,
                        totalDoc=a.totalDoc.Value,
                        netoDoc=a.netoDoc.Value,
                         impInafecto=a.impInafecto.Value,
                         impISC=a.impISC.Value,

                        idComparativo = a.OrdenCompra.idComparativo==null?0: a.OrdenCompra.idComparativo.Value,
                        idComparativoProv = a.OrdenCompra.idComparativo == null ? 0 : a.OrdenCompra.idProveedorSelec.Value,
                        numComparativo = a.OrdenCompra.idComparativo == null ? "" : a.OrdenCompra.Comparativo.numDocumento,
                    };

            return q.First();
        }

       

        public List<RecepcionDocListInfo> getDocListFromOrdenCompra(int idOrdenCompra)
        {
            var e = ApplySelect_RecepcionDocListInfoExcel();
            var q=e.Where(p => p.idOrdenCompra == idOrdenCompra);

            

            return q.ToList();
        }

        //[DataObjectMethod(DataObjectMethodType.Select, false)]
        //public IEnumerable<OrdenCompraListInfo> getOrdenCompraSinFactura(int idObra, int startRowIndex, int maximumRows, string sortExpression)
        //{

            


        //    var q2 = (from a in DbUtil.Db.OrdenCompraItems
        //              where a.OrdenCompra.idObra == idObra
        //              & a.OrdenCompra.bitActivo == true

        //             & a.OrdenCompra.idEstado == 13 &
        //            (a.OrdenCompra.OrdenCompraItems.Sum(p => Convert.ToInt32(p.Insumo.bitControlStock)) == 0
        //             | (a.Insumo.bitControlStock == true & a.cantidad == a.cantidadRecep)
        //             | a.OrdenCompra.bitAnticipo == true)
        //              select new RecepcionDocPendienteInfo
        //              {
        //                  idInternal = a.OrdenCompra.idInternal,
        //                  proveedor = a.OrdenCompra.ComparativoProveedor.Proveedor.descripcion.ToUpper(),
        //                  fecha=a.OrdenCompra.fechaEmision.Value,
        //                  IGVTotal = a.OrdenCompra.igv.Value,
        //                  IGVTotalStr=a.OrdenCompra.IGVTotal.ToString(),
        //                  numero = String.Format("{0}-{1}", a.OrdenCompra.TipoOrden.simbol, a.OrdenCompra.numDocumento),
        //                  subTotal = a.OrdenCompra.subTotal.Value,
        //                  total = a.OrdenCompra.total.Value
        //              }).Distinct();

            
        //    var q3 = from a in DbUtil.Db.Rendicions
        //             where a.idObra == idObra
        //             & a.idEstado == 41
        //             select new RecepcionDocPendienteInfo
        //             {
        //                 idInternal=a.idInternal,
        //                 fecha=a.fechaAprobacion.Value,
        //                 IGVTotal=0,
        //                 IGVTotalStr="0",
        //                 numero=a.numDocumento,
        //                 subTotal=a.RendicionItems.Sum(p=>p.total),
        //                 subTotalStr = a.RendicionItems.Sum(p => p.total).ToString(),
        //                 tipo

        //             };


        //    _count = q2.Count();
        //    q2 = ApplySort(q2, sortExpression);

        //    return q2.Skip(startRowIndex).Take(maximumRows);



        //}


        //private IQueryable<OrdenCompraListInfo> ApplySort(IQueryable<OrdenCompraListInfo> q, string sortExpression)
        //{
        //    switch (sortExpression)
        //    {
        //        case "numDocumento":
        //            q = q.OrderBy(b => b.numDocumento);
        //            break;
        //        case "numDocumento DESC":
        //            q = q.OrderByDescending(b => b.numDocumento);
        //            break;
        //        case "fechaEmision":
        //            q = q.OrderBy(p => p.numDocumento).OrderBy(b => b.fechaEmision);
        //            break;
        //        case "fechaEmision DESC":
        //            q = q.OrderByDescending(p => p.numDocumento).OrderByDescending(b => b.fechaEmision);
        //            break;
        //        case "proveedor":
        //            q = q.OrderBy(b => b.proveedor);
        //            break;
        //        case "proveedor DESC":
        //            q = q.OrderByDescending(b => b.proveedor);
        //            break;

        //        case "subTotal":
        //            q = q.OrderBy(b => b.subTotal);
        //            break;
        //        case "subTotal DESC":
        //            q = q.OrderByDescending(b => b.subTotal);
        //            break;


        //        case "IGVTotal":
        //            q = q.OrderBy(b => b.IGVTotal);
        //            break;
        //        case "IGVTotal DESC":
        //            q = q.OrderByDescending(b => b.IGVTotal);
        //            break;


        //        case "total":
        //            q = q.OrderBy(b => b.total);
        //            break;
        //        case "total DESC":
        //            q = q.OrderByDescending(b => b.total);
        //            break;
        //        case "condicion":
        //            q = q.OrderBy(b => b.condicion);
        //            break;
        //        case "condicion DESC":
        //            q = q.OrderByDescending(b => b.condicion);
        //            break;
        //        case "numComparativo":
        //            q = q.OrderBy(b => b.numComparativo);
        //            break;
        //        case "numComparativo DESC":
        //            q = q.OrderByDescending(b => b.numComparativo);
        //            break;
        //        default:
        //            q = q.OrderByDescending(p => p.numDocumento).OrderByDescending(b => b.fechaEmision);
        //            break;
        //    }
        //    return q;
        //}


    }

}
